package com.framework.view.indicator.configs;

import androidx.annotation.Dimension;
import androidx.annotation.IdRes;

import java.util.Arrays;
import java.util.List;

/**
 * 自定义标题布局的配置
 *
 * @author liangzx
 * @version 1.0
 * @time 2020-04-21 18:06
 **/
public class LayoutConfig extends AbstractTitleConfig<LayoutConfig> {

    private List<Integer> needAutoChangeTxtIds;

    /**
     * 未选中大小列表
     */
    private List<Integer> normalTxtSizes;
    /**
     * 选中大小列表
     */
    private List<Integer> selectedTxtSizes;
    /**
     * 上间距
     */
    private int pendingTop;
    /**
     * 下间距
     */
    private int pendingBottom;
    /**
     * 点击事件绑定的id
     */
    private List<Integer> clickIds;

    private LayoutConfig() {
    }

    public static LayoutConfig factory() {
        return new LayoutConfig();
    }

    /**
     * 设置需要自动切换状态的文本控件资源id列表
     *
     * @param needAutoChangeTxtIds
     * @return
     */
    public LayoutConfig setNeedAutoChangeTxtIds(@IdRes List<Integer> needAutoChangeTxtIds) {
        this.needAutoChangeTxtIds = needAutoChangeTxtIds;
        return this;
    }

    /**
     * 设置需要自动切换状态的文本控件资源id列表
     *
     * @param needAutoChangeTxtIds
     * @return
     */
    public LayoutConfig setNeedAutoChangeTxtIds(@IdRes Integer... needAutoChangeTxtIds) {
        this.needAutoChangeTxtIds = Arrays.asList(needAutoChangeTxtIds);
        return this;
    }

    /**
     * 设置未选中时文本控件字体的大小列表，对应needAutoChangeTxtIds的id列表
     *
     * @param normalTxtSizes
     * @return
     */
    public LayoutConfig setNormalTxtSizes(@Dimension List<Integer> normalTxtSizes) {
        this.normalTxtSizes = normalTxtSizes;
        return this;
    }

    /**
     * 设置未选中时文本控件字体的大小列表，对应needAutoChangeTxtIds的id列表
     *
     * @param normalTxtSizes
     * @return
     */
    public LayoutConfig setNormalTxtSizes(@Dimension Integer... normalTxtSizes) {
        this.normalTxtSizes = Arrays.asList(normalTxtSizes);
        return this;
    }

    /**
     * 设置选中时文本控件字体的大小列表，对应needAutoChangeTxtIds的id列表
     *
     * @param selectedTxtSizes
     * @return
     */
    public LayoutConfig setSelectedTxtSizes(@Dimension List<Integer> selectedTxtSizes) {
        this.selectedTxtSizes = selectedTxtSizes;
        return this;
    }

    /**
     * 设置选中时文本控件字体的大小列表，对应needAutoChangeTxtIds的id列表
     *
     * @param selectedTxtSizes
     * @return
     */
    public LayoutConfig setSelectedTxtSizes(@Dimension Integer... selectedTxtSizes) {
        this.selectedTxtSizes = Arrays.asList(selectedTxtSizes);
        return this;
    }

    /**
     * 设置上间距
     *
     * @param pendingTop
     * @return
     */
    public LayoutConfig setPendingTop(@Dimension int pendingTop) {
        this.pendingTop = pendingTop;
        return this;
    }

    /**
     * 设置下间距
     *
     * @param pendingBottom
     * @return
     */
    public LayoutConfig setPendingBottom(@Dimension int pendingBottom) {
        this.pendingBottom = pendingBottom;
        return this;
    }

    /**
     * 绑定点击事件
     *
     * @param clickIds
     * @return
     */
    public LayoutConfig bindClickIds(@IdRes Integer... clickIds) {
        this.clickIds = Arrays.asList(clickIds);
        return this;
    }

    /**
     * 根据当前标题所属位置获取选中的颜字体大小值<br>
     * 该方法先判断大小列表是否为空，如空则取单个大小，非空则取大小列表中对应位置的值，超出下标则取最后一个
     *
     * @param index
     * @return
     */
    public int getSelectedTxtSizeByPosition(int index) {
        if (null == selectedTxtSizes || selectedTxtSizes.isEmpty()) {
            return getSelectedSize();
        }
        if (selectedTxtSizes.size() <= index) {
            return selectedTxtSizes.get(selectedTxtSizes.size() - 1);
        }
        return selectedTxtSizes.get(index);
    }

    /**
     * 根据当前标题所属位置获取未选中的颜字体大小值<br>
     * 该方法先判断大小列表是否为空，如空则取单个大小，非空则取大小列表中对应位置的值，超出下标则取最后一个
     *
     * @param index
     * @return
     */
    public int getNormalTxtSizeByPosition(int index) {
        if (null == normalTxtSizes || normalTxtSizes.isEmpty()) {
            return getNormalSize();
        }
        if (normalTxtSizes.size() <= index) {
            return normalTxtSizes.get(normalTxtSizes.size() - 1);
        }
        return normalTxtSizes.get(index);
    }

    public List<Integer> getNeedAutoChangeTxtIds() {
        return needAutoChangeTxtIds;
    }

    public List<Integer> getNormalTxtSizes() {
        return normalTxtSizes;
    }

    public List<Integer> getSelectedTxtSizes() {
        return selectedTxtSizes;
    }

    public int getPendingTop() {
        return pendingTop;
    }

    public int getPendingBottom() {
        return pendingBottom;
    }

    public List<Integer> getClickIds() {
        return clickIds;
    }
}
